/*不定参宏函数的使用 */

#define _GNU_SOURCE

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

#define LOG(fmt, ...) printf("[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__)

/*C语言中不定参函数的使用，不定参数据的访问*/
void printNum(int count, ...)
{
    va_list ap;
    va_start(ap, count);
    for (int i = 0; i < count; i++)
    {
        int num = va_arg(ap, int);
        printf("param[%d]: %d\n", i, num);
    }
    va_end(ap);
}

void myprint(const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    char *res;
    int ret = vasprintf(&res, fmt, ap);
    if (ret != -1)
    {
        printf("%s", res);
    }
    free(res);
    va_end(ap);
}

int main()
{
    // printf("[%s:%d] %s-%d\n", __FILE__, __LINE__, "hello", 666);
    LOG("%s-%d\n", "hello", 666);
    LOG("hello\n");

    printNum(2, 666, 777);
    myprint("%s-%d", "hello world", 888);
    return 0;
}